// 统一封装接口方法
// 每个方法负责一个url地址
// 逻辑页面,导入这个接口的方法，就能发请求
// 好处：请求url路径，可以在这里统一管理
import request from '@/utils/request.js'
import { getToken } from '@/utils/token'
// 登录接口
// axios内部，会把参数对象转成json字符串格式发后台
// axios内部, 会自动携带请求参数(headers)里
// Content-Type: 'application/json'
export const loginAPI = ({mobile, code}) => request({
  url: '/v1_0/authorizations',
  method: 'POST',
  data: {
    mobile,
    code
  }
})

// 用户 - 关注
export const userFollowedAPI = ( { userId }) => request({
  url: `/v1_0/user/followings`,
  method: 'POST',
  data:{
    target: userId
  }
})
// 用户 - 取消关注
export const userUnFollowedAPI = ( { userId } ) => request({
  url: `/v1_0/user/followings/${userId}`,
  method: 'DELETE'
})
// 用户 - 获取用户个人资料(编辑页面使用)
export const userEditAPI = () => request ({
    url: `/v1_0/user/profile`,
    method: 'GET'
})
// 用户 - 获取基本信息(我的页面请求数据)
export const userAPI =() => request({
  url: `/v1_0/user`,
  method: 'GET'
})
// 用户 - 更新头像
export const updataUserPhotoAPI = (fd) => request({
  url: '/v1_0/user/photo',
  method: 'PATCH',
  data: fd //fd是外面传进来的 new FormData()对象。 这里不能加{}
  // 如果请求体直接是FormData对象，也不用自己添加
  // Content-Type,axios发现数据请求体是表单对象,它也不会转成json字符串
  // 也不会带Content-Type: application/json, 而是交给浏览器发现请求体formData,浏览器自己携带
})
// 用户 - 更新基本资料
export const updateUserProfileAPI = (obj) => {
   // 判断有什么值，再带什么参数给后台
  return request({
      url: `/v1_0/user/profile`,
      method: 'PATCH', // 局部更新 -> PUT(全部更新)
      data: obj
      /* { // data是不会忽略值为null的那对key+value，params遇到null值会忽略不携带此对参数和值给后台
        name, //昵称
        gender, //性别 0-男 1-女
        birthday, // 生日(年 - 月 - 日)
        intro, // 个人介绍
      } */
    })
}
// 频道-获取所有频道
export const getAllChannelsAPI = () => request({
  url: '/v1_0/channels',
  method: 'GET'
})

// 频道-获取-用户选择的频道
// 注意：用户没有登陆，默认返回后台设置的默认频道列表
export const getUserChannelsAPI = () => request({
  url: '/v1_0/user/channels',
  method: 'GET',
})
// 频道-更新覆盖频道
export const updateChannelsAPI = ( { channels }) => request({
  url: '/v1_0/user/channels',
  method: 'PUT',
  data: {
      channels // 用户已选频道数组
  },
})
// 频道 - 删除用户指定的频道
export const removeTheChannelAPI =  ( { channelId } ) => request({
  url: `/v1_0/user/channels/${channelId}`,
  method: 'DELETE',
})

// 文章 - 获取列表
export const getAllArticleListAPI = ({channel_id, timestamp}) => request({
  url: '/v1_0/articles',
  method: 'GET',
  params: { // 这里的参数，axios会帮拼接在url?后面
    channel_id,
    timestamp
  }

})

// 文章 - 反馈 - 不感兴趣
// axios内部，会把参数对象转成json字符串格式发后台, 因此不用写Content-Type
export const dislikeArticleAPI = ({ artId }) => request({
    url: '/v1_0/article/dislikes',
    method: 'POST',
    data: {
        target: artId
    }
})
// 文章 - 反馈 - 垃圾内容
export const reportArticleAPI = ({ artId, type }) => request({
    url: '/v1_0/article/reports',
    method: 'POST',
    data: {
        target: artId,
        type: type,
    }
})
// 文章 - 获取详情
export const detailAPI = ( {artId}) => request({
    url: `/v1_0/articles/${artId}`
})
// 文章 - 点赞
export const likeArticleAPI = ( {artId}) => request({
  url: `/v1_0/article/likings`,
  method: 'POST',
  data: {
    target: artId
  }
})
// 文章 - 取消点赞
export const unlikeArticleAPI = ( {artId}) => request({
  url: `/v1_0/article/likings/${artId}`,
  method: 'DELETE'
})
// 文章 - 获得评论列表
export const commentsListAPI = ( {id, offset = null, limit = 10}) => request({
    url: `/v1_0/comments`,
    method: 'GET',
    params: { // axios 只针对params参数，如果发现键值对，值为null，会忽略此参数名和值不携带在url?后面
      type: 'a',
      source: id,
      offset,
      limit,
    }
})
// 文章 - 评论 - 喜欢
export const commentLikingAPI = ({ comId }) => {
  return request({
    url: '/v1_0/comment/likings',
    method: 'POST',
    data: {
      target: comId
    }
  })
}
// 文章- 评论 - 取消喜欢
export const commentDisLikingAPI = ({ comId }) => {
  return request({
    url: `/v1_0/comment/likings/${comId}`,
    method: 'DELETE'
  })
}
// 文章- 评论 - 发布评论
export const commentSendAPI = ({ id, content, art_id = null }) => {
  // 1. axios中, data请求体传参, 如果值为null是不会忽略这个参数的
  // 也会把参数名和值携带给后台 (只有params遇到null才会忽略)
  // 2. 形参art_id可选参数, 如果逻辑页面是对文章评论, 则不需要传递art_id
  // 所以这时, 内部art_id值为null就证明此次调用, 是针对文章评论
  // data请求体对象需要自己处理
  const obj = {
    target: id,
    content
  }
  if (art_id !== null) { // 如果本次有第三个参数, 证明是对评论进行回复
    obj.art_id = art_id
  }
  return request({
    url: '/v1_0/comments',
    method: 'POST',
    data: obj
  })
}
// 搜索 - 联想菜单
export const suggestListAPI = ( { keywords }) => request({
    url: '/v1_0/suggestion',
    params: {
      q: keywords
    }
})

// 搜索 - 搜索结果列表
export const searchResultAPI = ( { page = 1, per_page = 10, q}) => request({
    url: '/v1_0/search',
    method: 'GET',
    params: {
        page,
        per_page,
        q
    }
})


